From: Felix Fietkau Date: Tue, 15 Jul 2025 13:26:16 +0000 (+0200) Subject: build: ipkg-remove: fix source name / package confusion, optimize X-Git-Url: http://git.openwrt.org/%22https:/collectd.org/%22http:/www.crowdsec.net//%22https%22/%22https:/collectd.org/%22http:/www.crowdsec.net/%22https%22?a=commitdiff_plain;h=471fd0a50281ce2a37fece402c4c5bd609b6d580;p=openwrt%2Fopenwrt.git build: ipkg-remove: fix source name / package confusion, optimize The script always gets passed the package name, not the source name. Optimize for the default case where the package name matches the filename prefix. Signed-off-by: Felix Fietkau --- diff --git a/scripts/ipkg-remove b/scripts/ipkg-remove index f4957004c0..19d7148e83 100755 --- a/scripts/ipkg-remove +++ b/scripts/ipkg-remove @@ -3,17 +3,24 @@ sourcename="$1"; shift for pkg in "$@"; do - tar -Ozxf "$pkg" ./control.tar.gz 2>/dev/null | tar -Ozxf - ./control 2>/dev/null | \ - while read field value; do - if [ "$field" = "SourceName:" ] && [ "$value" = "$sourcename" ]; then - rm -vf "$pkg" - break - fi - done case "$pkg" in */"${sourcename}_"*.ipk) rm -vf "$pkg" ;; + *) + tar -Ozxf "$pkg" ./control.tar.gz 2>/dev/null | tar -Ozxf - ./control 2>/dev/null | { + packagename= + abiversion= + while read field value; do + case "$field" in + Package:) packagename="$value";; + ABIVersion:) abiversion="$value";; + esac + done + [ -n "$abiversion" ] && packagename="${packagename%%$abiversion}" + [ "$packagename" = "$sourcename" ] && rm -vf "$pkg" + } + ;; esac done